package com.darwin.darwinUI.core
{
	import flash.display.DisplayObject;

	/**
	 * UI组件皮肤代理类。
	 * UISkin类的作用为UI组件内部调用来绑定素材
	 * @author lipi
	 */
	public class UISkinProxy
	{
		public function UISkinProxy()
		{
			if(_instance == null){
				_instance = this;
			}
			else{throw new Error("实例化单例类出错-UISkin");}
		}
		
		private static var _instance:UISkinProxy;
		
		public static function getInstance():UISkinProxy
		{
			if(_instance == null)
				_instance = new UISkinProxy();
			
			return _instance;
		}
		
		private var _adapter:IUISkinAdapter;
		/**
		 * 请求UI素材的适配器
		 */
		public function get adapter():IUISkinAdapter
		{
			return _adapter;
		}

		public function set adapter(value:IUISkinAdapter):void
		{
			_adapter = value;
		}
		
		
		/**
		 * 取得一个素材
		 * @param skinName 素材名
		 * @param fn 回调函数
		 * @return 如果素材当前忆存在则返回显示对象
		 */
		public function getSkin(skinName:String,fn:Function = null):DisplayObject
		{
			if(adapter == null)
			{
				if(fn != null) fn(null);
				return null;
			}else{
				return adapter.getSkin(skinName,fn);
			}
		}
		
		/**
		 * 
		 *  取得一个素材
		 * @param skinName 素材名
		 * @param fn 回调函数
		 * @return 如果素材当前已存在则返回素材类
		 */
		public function getSkinClass(skinName:String,fn:Function = null):Class
		{
			if(adapter == null)
			{
				if(fn != null) fn(null);
				return null;
			}else{
				return adapter.getSkinClass(skinName,fn);
			}
			
		}
		
		
		
		
	}
}